package com.zzyy.study.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**请求防抖锁，用于防止前端重复提交导致的错误
 *
 * 注解定义了几个基础的属性，redis锁前缀、redis锁时间、redis锁时间单位、key分隔符。
 * key分隔符是用来将多个参数合并在一起的，
 * 比如userName是张三，userPhone是123456，那么完整的key就是"张三&123456"，
 * 最后再加上redis锁前缀，就组成了一个唯一key
 * @auther zzyy
 * @create 2024-03-13 11:48
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface RequestLock {

    /**
     * redis锁前缀
     * @return 默认为空，但不可为空
     */
    String prefix() default "";

    /**
     * redis锁过期时间
     * @return 默认2秒
     */
    int expire() default 20;

    /**
     * redis锁过期时间单位
     *
     * @return 默认单位为秒
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * redis  key分隔符
     *
     * @return 分隔符
     */
    String delimiter() default "&";
}

